#ifndef _PROTOTYPE_H
#define _PROTOTYPE_H

#include <iostream>
#include <string>

class Prototype
{
public:
	Prototype(){ m_name = "Prototype";}
	virtual ~Prototype(){}

	virtual Prototype* Clone() = 0;
	virtual void Print() = 0;

protected:
	std::string m_name;
};

class ConcretePrototype : public Prototype
{
public:
	ConcretePrototype(){}
	~ConcretePrototype(){}

	ConcretePrototype(const ConcretePrototype& cp);

	Prototype* Clone();
	void Print();
};

#endif